package com.arpa.wms.mapper;

import com.arpa.wms.domain.dto.PickItemCancelQuantityDto;
import com.arpa.wms.domain.dto.PickingItemDTO;
import com.arpa.wms.domain.dto.PickingRegisterDTO;
import com.arpa.wms.domain.dto.WmsTaskDTO;
import com.arpa.wms.domain.entity.PickingItem;
import com.arpa.wms.domain.vo.PdaPickingRegisterVO;
import com.arpa.wms.domain.vo.PickingItemVO;
import com.arpa.wms.domain.vo.PickingItemWithRegisterVO;
import com.arpa.wms.domain.vo.PickingTaskItemVO;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>
 * 拣货明细 Mapper 接口
 * </p>
 *
 * @author LEO
 * @since 2020-08-07
 */
public interface PickingItemMapper extends BaseMapper<PickingItem> {

    /**
     * 查询列表
     * @param pickingItemDTO
     * @return
     */
    List<PickingItemVO> queryList(PickingItemDTO pickingItemDTO);

    /**
     * 查询合计,包含总数
     * @param pickingItemDTO
     * @return
     */
    PickingItemVO queryListSum(PickingItemDTO pickingItemDTO);

    /**
     * @description
     * 关联查询确认单表
     * @author xuyang
     * @date 2020/10/22 13:31
     * @param pickingItemDTO:
     **/
    List<PickingItemWithRegisterVO> queryItemWithRegisterList(PickingItemDTO pickingItemDTO);

    /**
     * @description
     *
     * @author
     * @date
     * @param pickingItemDTO:
     **/
    List<PickingItemWithRegisterVO> queryItemReturnRegisterList(PickingItemDTO pickingItemDTO);

    /***
     * @description
     * PDA查询未拣货任务列表
     * @author xuyang
     * @date 2020/10/24 8:58
     **/
    List<PickingTaskItemVO> queryUnPickingList(PickingRegisterDTO registerDTO);

    /**
     * PDA获取拣货任务拣货统计信息
     * @param pickingCode
     * @param location
     * @param goodsBarCode
     * @param goodsCode
     * @return
     */
    PickingTaskItemVO pickingInfoForPda(String pickingCode,String location,String goodsBarCode,String goodsCode,String groupCode);

    /***
     * @description
     * PDA查询已拣货任务明细， 这个数据是从拣货确认表中查询的，为了便于与未拣货的一起管理，所以放在item这里
     * @author xuyang
     * @date 2020/10/24 8:30
     * @param sourceCode:
     * @param locations:
     * @param status:
     **/
    List<PickingTaskItemVO> queryFinishPickingList(WmsTaskDTO wmsTaskDTO);
//    List<PickingTaskItemVO> queryFinishPickingList(@Param("sourceCode") String sourceCode, @Param("locations")String locations, @Param("status")String status);

    /**
     * @description
     * 尝试更新子单状态，试探明细是否完成拣货
     * @author xuyang
     * @date 2020/10/26 10:18
     * @param pickingItemCode:
     * @param finishStatus:
     **/
    int updateStatusIfFinish(@Param("code") String pickingItemCode, @Param("status") String finishStatus);

    /**
     * @description
     * 尝试更新拣货单明细的缺货数量
     * @author xuyang
     * @date 2020/10/26 14:31
     * @param pickingItemCode:
     * @param stockoutQuantity:
     **/
    int updateStockout(@Param("code") String pickingItemCode, @Param("stockoutQuantity") BigDecimal stockoutQuantity);

    /**
     * 批量更新拣货明细取消数量
     *
     * @param pickItemCancelQuantityDtoList
     * @author liuxr
     * @date 2021/5/17 21:00
     */
    void updateCancelQuantityBatch(@Param("pickItemCancelQuantityDtoList")  List<PickItemCancelQuantityDto> pickItemCancelQuantityDtoList);

    /**
     * 按单拣货，更新拣货明细拣货数量、缺货数量及拣货状态拣货完成
     *
     * @param pickingItems
     * @author liuxr
     * @date 2021/5/27 20:36
     */
    void singlePickingUpdateItemPickingQuantityAndStockoutQuantity(@Param("pickingItems") List<PickingItem> pickingItems);

    /**
     * 通过拣货单号获取入驻商标识
     * @author liuxr
     * @date 2021/8/25 14:42
     * @param pickingCode
     * @return java.lang.String
     */
    String getShipmentCodeByPickingCode(@Param("pickingCode") String pickingCode,@Param("groupCode")String groupCode);

    /**
     * 获取拣货确认列表
     * @author rfwang
     * @date 2022/1/27 10:13
     * @param registerDTO
     * @return
     */
    List<PdaPickingRegisterVO> pickingItemList(PickingRegisterDTO registerDTO);
}
